package com.xuecheng.system.service.impl;

import com.xuecheng.api.system.model.dto.CourseCategoryDTO;
import com.xuecheng.common.domain.code.CommonErrorCode;
import com.xuecheng.common.domain.response.RestResponse;
import com.xuecheng.common.util.StringUtil;
import com.xuecheng.system.convert.CourseCategoryConvert;
import com.xuecheng.system.entity.CourseCategory;
import com.xuecheng.system.entity.ex.CourseCategoryNode;
import com.xuecheng.system.mapper.CourseCategoryMapper;
import com.xuecheng.system.service.CourseCategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;

import java.util.List;

/**
 * <p>
 * 课程分类 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseCategoryServiceImpl extends ServiceImpl<CourseCategoryMapper, CourseCategory> implements CourseCategoryService {


    public List<CourseCategoryDTO> queryTreeNodes() {
        /*
         * 由于Mapper中的方法是自定义
         *   MP是无法直接调用Mapper中的自定义方法
         *   MP：通过mp提供的api可以直接获得Mapper的实例对象
         *       getBaseMapper--获得Mapper（不需要在service通过注入的方式获得Mapper）
         * */
        // 1.调用 MP 的 Api 获得 Mapper
        CourseCategoryMapper baseMapper = this.getBaseMapper();
        // 2.调用自定义方法
        List<CourseCategoryNode> courseCategoryNodes = baseMapper.selectTreeNodes();
        //3. 将数据转为 DTO 数据
        List<CourseCategoryDTO> courseCategoryDTOS = CourseCategoryConvert.INSTANCE.nodes2dtos(courseCategoryNodes);
        return courseCategoryDTOS;
    }

    /**
     * 1.判断关键数据
     * 2.根据id查询课程分类信息并判断
     * 判断课程分类信息是否存在
     * 3.返回结果数据
     */
    public RestResponse<CourseCategoryDTO> getCourseCategoryById(String id) {
        //1.判断关键数据
        if (StringUtil.isBlank(id)) {
            return RestResponse.validfail(CommonErrorCode.E_100101);
        }
        //2.根据id查询课程分类信息并判断
        CourseCategory courseCategory = this.getById(id);
        //判断课程分类信息是否存在
        if (ObjectUtils.isEmpty(courseCategory)) {
            return RestResponse.validfail(CommonErrorCode.E_100104);
        }
        //3.返回结果数据
        //po-->dto
        CourseCategoryDTO courseCategoryDTO = CourseCategoryConvert.INSTANCE.entity2dto(courseCategory);
        RestResponse<CourseCategoryDTO> success = RestResponse.success(courseCategoryDTO);

        return success;
    }
}
